/* 에이빌더 전용 jquery 프로그램 */ // 에이빌더 게시판용 var cmt_modify_idx = ''; var cmt_reply_idx = ''; var as_interval = /*as_confirm = */null; //if (typeof(designer_box_url) !== 'undefined') return; // 디자이너에서 실행되지 않도록 하는 회피용 샘풀 // This hotfix makes older versions of jQuery UI drag-and-drop work in IE9 (function($){var a=$.ui.mouse.prototype._mouseMove;$.ui.mouse.prototype._mouseMove=function(b){if($.browser.msie&&document.documentMode>=9){b.button=1};a.apply(this,[b]);}}(jQuery)); jQuery.fn.extend({ renameAttr: function(name, newName, removeData) { var val; return this.each(function() { val = jQuery.attr(this, name); jQuery.attr(this, newName, val); jQuery.removeAttr(this, name); }); } }); $(function() { $('body').on('change', 'form', function() { submit_is_ing = 'N'; }); /*$(window).on('pageshow', function(e) {if (e.originalEvent.persisted) {window.location.reload();}}); // 뒤로가기(브라우저 캐시로 로딩)할 때 강제로 새로고침 시키는 코드*/ $.fn.unveil=function(a,b){function i(){var a=g.filter(function(){var a=$(this);if(!a.is(":hidden")){var b=c.scrollTop(),e=b+c.height(),f=a.offset().top,g=f+a.height();return g>=b-d&&f<=e+d}});h=a.trigger("unveil"),g=g.not(h)}var h,c=$(window),d=a||0,e=window.devicePixelRatio>1,f=e?"data-src-retina":"data-src",g=this;return this.one("unveil",function(){var a=this.getAttribute(f);a=a||this.getAttribute("data-src"),a&&(this.setAttribute("src",a),"function"==typeof b&&b.call(this))}),c.on("scroll.unveil resize.unveil lookup.unveil",i),i(),this}; $(".unveil img").unveil(200); // 로딩중표시기 (viewer.inc.php 로 이동) if ($('#loading_img').length <= 0) $('').appendTo('body'); // 마우스 좌표 얻음 __mouse_xy = new Array(); $(this).bind('mousemove',function(e) { __mouse_xy[0] = e.pageX; __mouse_xy[1] = e.pageY; __mouse_xy[2] = e.screenX; __mouse_xy[3] = e.screenY; }); // 날짜입력상자 now = new Date(); // 드래그객체 $('.draggable').draggable({ scroll: true }); // 버튼 커서모양 변경 $('body').on('mouseover', 'img[id*=_btn_],p[id*=_btn_],span[id*=_btn_],img[id*=-btn-],p[id*=-btn-],span[id*=-btn-]', function(e) { $(this).css('cursor', 'pointer'); }); // 링크주소 #; 제거/복원 $('body').on('click', 'a', function(e) { if ($(this).attr('href') == '#;' || $(this).attr('href') == '#') $(this).attr('tmp', $(this).attr('href')).removeAttr('href').css('cursor', 'pointer'); if ($(this).hasClass('AB-btn-rec-chk')) { var chk_idxs = []; var form = $(this).parents('form'); $('input[name="list_select[]"]', form).each(function(i) { if ($(this).is(':checked')) chk_idxs.push($(this).val()); }); if (chk_idxs.length > 0) { if ($(this).attr('data-wl') !== 'N') { // exec-func="evt,click,#xxxx" 로 클릭 시키는 경우 window.location 으로 해야 진행됨 (엑셀 다운로드 등) window.location = $(this).attr('href') + '&chk=' + chk_idxs.join(','); return false; } else $(this).attr('href', $(this).attr('href') + '&chk=' + chk_idxs.join(',')); } else { alert($(this).attr('data-msg')); return false; } } }); $('body').on('mouseout', 'a', function(e) { if ($(this).attr('href') == null && $(this).attr('tmp') != null) $(this).attr('href', $(this).attr('tmp')).removeAttr('tmp'); }); // 버튼클릭전에 메시지 띄우기 $('*[data-cf-msg]').each(function(i) { var tn = $(this).prop('tagName'); var oc = $(this).attr('onclick'); if (oc === undefined || oc.indexOf('confirm(') < 0) { var msg = $(this).attr('data-cf-msg'); if (msg != '') { if (tn == 'BUTTON') $(this).attr('onclick', "if(!confirm('" + msg + "')) {return false;} else {" + oc + "}"); else if (tn == 'A') $(this).attr('onclick', "if(!confirm('" + msg + "')) {return false;} else {document.location.href='" + $(this).attr('href') + "'}"); else if (tn == 'INPUT') { if ($(this).attr('type') === 'button') $(this).attr('onclick', "if(!confirm('" + msg + "')) {return false;} else {" + oc + "}"); else $(this).attr('onclick', "if(!confirm('" + msg + "')) {return false;} else { }"); } } } }); // 개별 입력상자 값 검증 결과 메시지를 보여주는 함수 $.fn.real_time_verify_msg = function(vars) { var oms; var obj_this = $(this); if (vars.result === true) vars.result = 'Y'; if (vars.msc === undefined) vars.msc = 'admin-help-in'; if (obj_this.attr('msg') !== undefined) vars.msg = obj_this.attr('msg'); oms_html = obj_this.attr('oms-html'); oms = obj_this.next('span.' + vars.msc); if (oms.length === 0) { oms = obj_this.next('span.realtime-msg.' + vars.cn); if (oms.length === 0) { obj_this.after('' + vars.msg + ''); oms = obj_this.next('span.realtime-msg.' + vars.cn); } } else { if (oms_html === undefined && !oms.hasClass('realtime-msg')) obj_this.attr('oms-html', oms.html()); } oms.removeClass('rtvm-Y').removeClass('rtvm-N'); if (obj_this.val() != '') { if (vars.result !== 'Y') { oms.html(vars.msg); oms.addClass('rtvm-N'); } else { oms.html('ok'); oms.addClass('rtvm-Y'); } } else { if (oms_html === undefined) oms.html(''); else oms.html(oms_html); } } $('body').on('keyup', 'input[pattern]', function(e) { if ($(this).attr('name') !== 'passwd_re') { var msg = $(this).attr('msg'); if (msg === undefined) return false; var patt = new RegExp($(this).attr('pattern')); var result = patt.test($(this).val()); $(this).real_time_verify_msg({'msg':$(this).attr('msg'), 'result':result, 'cn':'join-key', 'msc':(_VM_ === 'p' ? 'admin-help-in' : 'admin-help-in')}); } }); $('body').on('keyup', 'input[type="password"][name$="_re"]', function(e) { var result = 'N'; var other_name = $(this).attr('name').substr(0, $(this).attr('name').length - 3); var obj_other = $('input[type="password"][name=' + other_name + ']'); if ($(this).val() === obj_other.val()) result = 'Y'; $(this).real_time_verify_msg({'msg':'패스워드를 동일하게 입력하세요.', 'result':result, 'cn':'join-key', 'msc':(_VM_ === 'p' ? 'admin-help-in' : 'admin-help-in')}); }); $('body').on('keyup', 'input[name="chk_person"]', function() { var obj_this = $(this); var rel = obj_this.attr('rel'); if (rel === undefined) return false; $.get(obj_this.attr('rel') + '?pcv=' + obj_this.val(), function(d) { obj_this.real_time_verify_msg({'msg':'스팸방지코드를 정확히 입력하세요.', 'result':d, 'cn':'spam-key', 'msc':(_VM_ === 'p' ? 'admin-help-in' : 'admin-help-in')}); }); }); // 게시판 폼 설정에서 로딩개수를 선택하면 viewer.inc.php 에서 자동 실행함 // 로딩 개수는 게시물 노출수의 배수 여야 함 $.fn.evt_load_record = function(vars) { //console.log(this); var ing = 'N'; var conn = '?'; var obj_this = this; var obj_idx = obj_this.attr('id') + '-evt-load'; var data_area = $(obj_this.attr('data-area')); // 데이터 영역 선택자 (viewer.inc.php 에서 설정됨) data_area.after('
'); // 이벤트 발생 위치용 마크업, 데이터영역 바로 다음에 위치 var url_head = obj_this.attr('url'); if (url_head.indexOf('?') > -1) conn = '&'; var tpl = obj_this.attr('tpl'); // 로딩 개수 : 한번 로딩시 가져올 게시물 수 var ttg = parseInt(obj_this.attr('ttg')) - 1; // 로딩 회수 var more_btn = $('.' + obj_this.attr('id') + '-evt-load-btn'); // 더보기 버튼 찾기 (없으면 스크롤 이벤트 자동 등록) var pla = $(obj_this.attr('pla')); // 페이지링크 영역 (모두 로딩 후 노출) var debug = obj_this.attr('debug'); if (isNaN(ttg) || ttg == 0) { more_btn.css('display', 'none'); return; } else { pla.css('display', 'none'); more_btn.css('display', ''); if (more_btn.length > 0) { more_btn.on('click', function(e) { loading(); }); } else { var controller = new ScrollMagic.Controller(); var scene = new ScrollMagic.Scene({triggerElement: '#' + obj_idx, duration:obj_this.attr('dur')}).addTo(controller).triggerHook('onEnter').on('enter', function(e) { loading(); }); if (debug === 'Y') scene.addIndicators() // add indicators (requires plugin) } } var ttp = obj_this.attr('ttp'); if (ttp === undefined || ttp == '') ttp = 0; var start_page = (parseInt(obj_this.attr('curp')) - 1) * parseInt(ttp) + 1; // ttp : ceil($form_config['tpa'] / $form_config['tpl']) function loading(callback) { if (ttg === 1) { pla.css('display', ''); more_btn.css('display', 'none'); } // 마지막 페이지 일 때 if (ttg === 0 || ing === 'Y') return false; // 로딩 회수 종료 또는 진행중인 ing = 'Y'; start_page++; $('#loading_img').center(); $('#loading_img').css('display', ''); var url = url_head + conn + obj_this.attr('tpln') + '=' + tpl + '&' + obj_this.attr('pvn') + '=' + start_page + '&AJAX=Y&SCROLLLOADING=Y'; $.get(url, {}, function(data) { var trs = $(data_area.selector, $(data)).html(); // 데이터 영역의 html 얻음 $('#loading_img').css('display', 'none'); data_area.append(trs); // 추가 if (obj_this.attr('qt') === 'R') data_area.cmt_markup(); ing = 'N'; ttg--; if (debug === 'Y') { console.log(url); console.log(obj_this.attr('qt')); console.log(ttg); } if (callback !== undefined) callback(); }); } } // ajax 링크 처리 // ajax_area : 불러온 내용을 넣을 영역(속성이 없으면 AB_contents로 지정됨, return_area : 페이지에서 불러올 영역(속성이 없으면 ajax_area 값으로 지정 됨) $('body').on('click', 'a[ajax=Y]', function(e) { var load_infos = []; var href = $(this).attr('href'); if (href !== undefined) { // #; 인 경우 tmp 로 옮겨갔다가 복원됨 이때 href 는 제거 되므로 undefined 상태 var cfm = $(this).attr('data-acf-msg'); if (cfm !== undefined && !confirm(cfm)) return false; // 메시지 취소시 중지 if ($(this).hasClass('-hide')) return false; // 토글이 닫기시 중지 if ($(this).attr('data-fl') === 'N') { // 강제로딩이 아닐때 값이 있으면 중지 var wrap_aa = $('#' + $(this).attr('ajax_area')); if (wrap_aa.length <= 0) wrap_aa = $('#---' + $(this).attr('ajax_area') + '---'); if (wrap_aa.length > 0 && wrap_aa.html() != '') return false; } var doc = eval($(this).attr('doc') === undefined ? 'window' : $(this).attr('doc')); doc.$('#loading_img').center(); doc.$('#loading_img').css('display', ''); var load_first = "{\"load_url\":\"" + href + "\",\"ajax_area\":\"" + $(this).attr('ajax_area') + "\",\"return_area\":\"" + $(this).attr('return_area') + "\",\"anchor\":\"" + $(this).attr('anchor') + "\",\"dialog\":\"" + $(this).attr('dialog') + "\",\"as\":\"" + $(this).attr('as') + "\",\"mode\":\"" + $(this).attr('mode') + "\"}"; load_infos.push(jQuery.parseJSON(load_first)); var load_info = $(this).attr('load_info'); if (load_info !== undefined) $.each(jQuery.parseJSON(load_info), function(idx, str) { load_infos.push(str); }); $.load_urls(load_infos, doc, $(this)); return false; } }); // 줄바꿈 안되게 처리 $.each($('textarea.AB-no-enter'), function() { $(this).on('keypress', function(e) { if (event.which == 13) e.preventDefault(); }); }); // 롤오버버튼처리 $.fn.set_img_rlv = function(vars) { $.each($('img[data-rlv=Y]'), function(key, val) { var oo = 'N'; var san = 'src'; if ($(this).attr('data-src') !== undefined) san = 'data-src'; var o_src = $(this).attr(san); if ($(this).attr('data-rlv-src') === undefined) { var exp_o_src = o_src.split('.'); var f_name = exp_o_src[exp_o_src.length-2]; if (f_name.substr(f_name.lastIndexOf('_')) !== '_over') { exp_o_src[exp_o_src.length-2] = f_name + '_over' } else { exp_o_src[exp_o_src.length-2] = f_name.substr(0, f_name.length-5) oo = 'Y'; } var r_src = exp_o_src.join('.'); } else { var r_src = $(this).attr('data-rlv-src'); } if (oo === 'N' && $(this).attr('data-rlv-d') === 'O') $(this).attr('src', r_src); if ($(this).attr('data-rlv-d') !== 'O' || $(this).attr('data-rlv-r') === 'Y') { if ($(this).attr('data-rlv-d') === 'O' && $(this).attr('data-rlv-r') !== 'Y') var T_src = r_src, r_src = o_src, o_src = T_src; $(this).off('mouseover mouseout'); $(this).on('mouseover', function(e) { if (!$(this).hasClass('except')) $(this).attr('src', r_src); }); $(this).on('mouseout', function(e) { if (!$(this).hasClass('except')) $(this).attr('src', o_src); }); } }); } // 숫자용 입력상자 처리 $('body').on('change blur', 'input[type=text].-number', function(e) { $(this).set_number_box(e); }); $.fn.set_number_box = function(e, vars) { var nn = this.attr('nn'); if (nn !== undefined && this.val() == '') this.val(nn); var min = this.attr('min'); if (min === undefined) min = 1; var val = ck_number(this[0], parseInt(min), parseInt(this.attr('max')), this.attr('msg'), 'R'); if (val !== undefined) { this.val(val); } else { val = nn; if (val === undefined) val = min; if (val === undefined) val = 1; this.val(val).change(); } //if (isNaN(parseInt(this.val()))) this.val(min); } // 여러 객체중 최대 높이로 높이를 통일 시킴 $.fn.set_height_max = function(vars) { var heights = new Array; if (vars === undefined) { var vars = {}; vars.ah = 0; } this.each(function(i) { heights.push($(this).height()); }); this.height(heights.reduce(function(pv, cr) { return pv > cr ? pv:cr; }) + vars.ah); } // 커버를 씌워 클릭할 수 없도록 함 $.fn.set_cover = function(vars) { var obj_this = this; obj_this.each(function(i) { if ($('.click-disable-cover', $(this)).length <= 0) { var msg = ''; var offset = $(this).offset(); obj_this.css('position', 'relative'); if ($(this).attr('msg') !== undefined) msg = ' onclick=\"alert(\'' + $(this).attr('msg') + '\')\"'; $(this).append('
'); } }); } // 체크상자 클릭시 같은 범위(div)내 다른 입력상자 및 태그를 en/disable 시킴 // 사용예 : $('.AB-dis-tog').enable_toggle({wt:'div',wteq:0,dc:'AB-disabled',box:'input,select,textarea',tag:'div,span'}); $.fn.enable_toggle = function(vars) { var obj_this = this; obj_this.on('click', function(e) { var obj_parent = $(this).parents(vars.wt).eq(vars.wteq); var obj_targs_tag = $(vars.tag, obj_parent); var obj_targs_box = $(vars.box, obj_parent); if ($(this).is(':checked') === true) { $(this).removeAttr('dsbl'); obj_parent.removeAttr('dsbl'); obj_targs_tag.removeAttr('dsbl'); obj_targs_box.prop('disabled', false); obj_targs_box.removeClass(vars.dc); } else { $(this).attr('dsbl', 'dsbl'); obj_parent.attr('dsbl', 'dsbl'); obj_targs_tag.attr('dsbl', 'dsbl'); obj_targs_box.prop('disabled', true); obj_targs_box.addClass(vars.dc); } obj_this.prop('disabled', false); }); } // 여러 입력상자(그룹)중 하나만 활성화 시키는 함수 // 하나의 입력상자를 정하고 id="AB-sit-box" grp-box="["입력상자1-1이름,입력상자1-2이름","입력상자2이름",...]" dis-cls="AB-disabled" 을 마크업(따옴표 안에 콤마로 구분된 입력상자들은 하나의 그룹을 의미) 하고 // disabled 된 입력상자들이 아예 보이지 않도록 하기 위해서는 감싸는 div 또는 li 등에 obe-none="AB-sit-box-test1-1,test1-2" 와 같은 형식으로 마크업 // $('#AB-sit-box').one_box_enable(); 를 실행 $.fn.one_box_enable = function(vars) { var obj_this = this; var dis_cls = obj_this.attr('dis-cls'); if (dis_cls === undefined) dis_cls = 'AB-disabled'; var grp_boxs = eval(obj_this.attr('grp-box')); var omi = 'obe-mark-' + obj_this.attr('id'); var form = obj_this.parents('form'); var obj_fmf = form.children('input[name=force_modify_fld]'); if (obj_fmf.length <= 0) { // 존재하지 않는 필수입력상자 체크 패스 준비 form.prepend(''); obj_fmf = form.children('input[name=force_modify_fld]'); } set_obe(); form.on('focusout change', '*[' + omi + '=Y]', function(e) { set_obe(); }); function set_obe() { var grp_sv, all_sv = ''; var force_modify_fld = new Array; for (var i=0, cnt_i=grp_boxs.length; i